home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Shareware / IDimager Personal 4.2.0.3 / setup_IDimager_Personal_V4.exe / {app} / web / loadimage.psc < prev    next >
Text File  |  2008-06-27  |  6KB  |  232 lines

  1. %code
  2.  
  3.   procedure DoResizeImage (AJpg: TImageItem; ASize: Integer);
  4.   var
  5.     AEp: TEffectProcessor;
  6.     ARes: TResizeSettings;
  7.   begin
  8.     if (ASize < 5) then
  9.       exit;
  10.  
  11.     // already at the right size?
  12.     if ASize = Max(AJpg.Graphic.Width, AJpg.Graphic.Height) then
  13.       exit;
  14.  
  15.     if (ASize > 5000) then
  16.       ASize := 5000;
  17.  
  18.     AEp := TEffectProcessor.Create (nil, False);
  19.     ARes := TResizeSettings.Create(nil);
  20.  
  21.     ARes.Width   := ASize;
  22.     ARes.Height  := ASize;
  23.  
  24.     AEp.EffectResize (AJpg, ARes);
  25.  
  26.     ARes.Free;
  27.     AEp.Free;
  28.   end;
  29.  
  30.   procedure MakeImageSquare (AJpg: TImageItem);
  31.   var
  32.     AEp: TEffectProcessor;
  33.   begin
  34.     AEp := TEffectProcessor.Create (nil, False);
  35.  
  36.     AEp.EffectCropToRatio (AJpg, 1, 1, False);
  37.  
  38.     AEp.Free;
  39.   end;
  40.  
  41.  
  42.   procedure DoResize (AItem: TCatalogItem; var AStream: TStream; ASize: Integer);
  43.   var
  44.     AJpg: TImageItem;
  45.     AJpgGr: TJPegGraphic;
  46.   begin
  47.     if ASize < 5 then
  48.       exit;
  49.  
  50.     AJpg := TImageItem.Create(nil);
  51.  
  52.     AJpg.NewGraphic ('*.jpg');
  53.     AStream.Position := 0;
  54.     AJpg.Graphic.LoadFromStream (AStream);
  55.  
  56.     if ASize > Max(AJpg.Graphic.Width, AJpg.Graphic.Height) then
  57.     begin
  58.       // load the full image
  59.       AItem.PushToImage (AJpg, False);
  60.       AJpg.Graphic.Clear;
  61.       AJpg.NewGraphic (AJpg.FileName);
  62.       AJpg._Load (True, True, True, ASize);
  63.     end;
  64.     AJpgGr := AJpg.Graphic;
  65.     AJpgGr.SaveQuality := Options.JPGQuality;
  66.  
  67.     DoResizeImage (AJpg, ASize);
  68.  
  69.     AStream.Size := 0;
  70.     AJpg.Graphic.SaveToStream (AStream);
  71.     AStream.Position := 0;
  72.  
  73.     AJpg.Free;
  74.   end;
  75.  
  76.   procedure MakeSquare (AItem: TCatalogItem; var AStream: TStream);
  77.   var
  78.     AJpg: TImageItem;
  79.     AJpgGr: TJPegGraphic;
  80.   begin
  81.     AJpg := TImageItem.Create(nil);
  82.  
  83.     AJpg.NewGraphic ('*.jpg');
  84.     AStream.Position := 0;
  85.     AJpg.Graphic.LoadFromStream (AStream);
  86.     AJpgGr := AJpg.Graphic;
  87.     AJpgGr.SaveQuality := Options.JPGQuality;
  88.  
  89.     MakeImageSquare (AJpg);
  90.  
  91.     AStream.Size := 0;
  92.     AJpg.Graphic.SaveToStream (AStream);
  93.     AStream.Position := 0;
  94.  
  95.     AJpg.Free;
  96.   end;
  97.  
  98.   procedure MakeSquareAndResize (AItem: TCatalogItem; var AStream: TStream; ASize: Integer);
  99.   var
  100.     AJpg: TImageItem;
  101.     AJpgGr: TJpegGraphic;
  102.   begin
  103.     AJpg := TImageItem.Create(nil);
  104.  
  105.     AJpg.NewGraphic ('*.jpg');
  106.     AStream.Position := 0;
  107.     AJpg.Graphic.LoadFromStream (AStream);
  108.  
  109.     if (ASize > Max(AJpg.Graphic.Width, AJpg.Graphic.Height)) then
  110.     begin
  111.       // load the full image
  112.       AItem.PushToImage (AJpg, False);
  113.       AJpg.Graphic.Clear;
  114.       AJpg.NewGraphic (AJpg.FileName);
  115.       AJpg._Load (True, True, True, ASize);
  116.       if not AJpg.IsJpeg then
  117.       begin
  118.         AJpgGr := TJpegGraphic.Create;
  119.         AJpgGr.Assign (AJpg.Graphic);
  120.         AJpg.Graphic.Free;
  121.         AJpg.Graphic := AJpgGr;
  122.       end;
  123.     end;
  124.     AJpgGr := AJpg.Graphic;
  125.     AJpgGr.SaveQuality := Options.JPGQuality;
  126.  
  127.     MakeImageSquare (AJpg);
  128.     DoResizeImage   (AJpg, ASize);
  129.  
  130.     AStream.Size := 0;
  131.     AJpg.Graphic.SaveToStream (AStream);
  132.     AStream.Position := 0;
  133.  
  134.     AJpg.Free;
  135.   end;
  136.  
  137. var
  138.   AItem: TCatalogItem;
  139.   ARs: TMemoryStream;
  140.   AFs: TTntFileStream;
  141.   AForcedThumb: Boolean;
  142.   AAllowOriginal: Boolean;
  143.   ASize: Integer;
  144. begin
  145.   //AAllowOriginal := Nvl(SessionData.Prop['IsAdmin'], False);
  146.   AAllowOriginal := True;
  147.  
  148.   if IsValidNumberString(Request.Params.Values['size'], False) then
  149.   begin
  150.     ASize := StrToInt(Request.Params.Values['size']);
  151.     if ASize < 0 then
  152.       ASize := 0;
  153.   end
  154.   else
  155.     ASize := 0;
  156.  
  157.   AItem := TCatalogItem.Create(nil);
  158.   if Catalog.FindItemCombinedByGUID (Request.Params.Values['image'], AItem) and
  159.      (
  160.        (
  161.          (AItem.HasThumb) or (AItem.HasMedium)
  162.        ) or
  163.        (AAllowOriginal and (Request.Params.Values['original'] = '1'))
  164.      )
  165.   then
  166.   begin
  167.     Response.CustomHeaders.Add ('Content-Disposition=inline;filename="' + UTF8Encode(WideExtractFileName (AItem.FileName)) + '"');
  168.  
  169.     if (Request.Params.Values['quality'] = '1') then
  170.       AForcedThumb := False
  171.     else
  172.     begin
  173.       AForcedThumb := (Request.Params.Values['thumb'] = '1');
  174.       if AForcedThumb and (ASize > Options.ThumbSize) then
  175.         AForcedThumb := False;
  176.     end;
  177.  
  178.     ARs := TMemoryStream.Create;
  179.  
  180.     if AAllowOriginal and (Request.Params.Values['original'] = '1') and (AItem.MediumLoaded) and WideFileExists(AItem.FileName) then
  181.     begin
  182.       //ARs.LoadFromFile (AItem.FileName)
  183.  
  184.       AFs := TTntFileStream.Create (AItem.FileName, fmOpenRead or fmShareDenyNone);
  185.       if Request.Params.Values['download'] = '1' then
  186.       begin
  187.         Response.CustomHeaders.Clear;
  188.         Response.CustomHeaders.Add ('Content-Disposition=attachment;filename="' + UTF8Encode(WideExtractFileName (AItem.FileName)) + '"');
  189.  
  190.         Response.ContentType       := 'application/octet-stream'
  191.       end
  192.       else
  193.         Response.ContentType       := FileMimeType (AItem.FileName);
  194.  
  195.       Response.ContentStream     := AFs;
  196.       Response.ContentLength     := AFs.Size;
  197.       Response.FreeContentStream := True;
  198.  
  199.       //Response.WriteContent;
  200.       exit;
  201.     end
  202.     else if (not AForcedThumb) and AItem.HasMedium then
  203.       AItem.LoadMediumFromFile (ARs)
  204.     else
  205.       AItem.LoadThumbFromFile (ARs);
  206.  
  207.     if (Request.Params.Values['square'] = '1') and
  208.        (ASize > 0)
  209.     then
  210.       MakeSquareAndResize (AItem, ARs, ASize)
  211.     else 
  212.     begin
  213.       if Request.Params.Values['square'] = '1' then
  214.         MakeSquare (AItem, ARs);
  215.  
  216.       if ASize > 0 then
  217.         DoResize (AItem, ARs, ASize);
  218.     end;
  219.  
  220.     Response.ContentType       := 'image/jpeg';
  221.     Response.ContentStream     := ARs;
  222.     Response.ContentLength     := ARs.Size;
  223.     Response.FreeContentStream := True;
  224.  
  225.     Response.WriteContent;
  226.  
  227.     // ARs.Free;    // don't free the stream because the streamer will do that since FreeContentStream is set
  228.   end;
  229.  
  230.   AItem.Free;
  231. end;
  232. %/code